package org.wisdom.ab.domain.department.repository;

import org.wisdom.ab.domain.department.entity.AbDepartment;
import org.wisdom.ab.domain.department.repository.dao.DepartmentDao;
import org.wisdom.data.jpa.repository.WisdomRepository;

import java.util.List;
import java.util.Optional;

/**
 * 部门仓储
 *
 * @author 张智研
 * @date 2022/05/16 08:43
 **/
public interface DepartmentRepository extends WisdomRepository<AbDepartment, String>, DepartmentDao {
    /**
     * 模糊查询部门列表
     *
     * @author 张智研
     * @date 2022/05/23 14:14
     * @param companyId
     *            公司id
     * @param deptIdPath
     *            部门路径
     * @return java.util.List<org.wisdom.ab.domain.entity.AbDepartment>
     */
    List<AbDepartment> findAllByCompanyIdAndDeptIdPathLike(String companyId, String deptIdPath);

    /**
     * 根据公司id和部门id查询部门以及部门下所有部门
     * 
     * @author 张智研
     * @date 2022/08/29 15:02
     * @param companyId
     *            公司id
     * @param departmentId
     *            部门id
     * @return java.util.Optional<org.wisdom.ab.domain.entity.AbDepartment>
     */
    Optional<AbDepartment> findByCompanyIdAndId(String companyId, String departmentId);

    /**
     * 根据公司id查询所有部门
     * @author 张智研
     * @date 2022/08/29 15:22
     * @param companyId 公司id
     * @return java.util.List<org.wisdom.ab.domain.entity.AbDepartment>
     */
    List<AbDepartment> findAllByCompanyId(String companyId);

    /**
     * 根据上级部门id查询部门
     * @author 张智研
     * @date 2022/08/29 15:43
     * @param departmentId 部门id
     * @return java.util.Optional<org.wisdom.ab.domain.entity.AbDepartment>
     */
    List<AbDepartment> findByParentId(String departmentId);

    /**
     * 根据上级部门id查询部门数量
     * @author 张智研
     * @date 2022/08/29 15:43
     * @param departmentId 部门id
     * @return java.util.Optional<org.wisdom.ab.domain.entity.AbDepartment>
     */
    int countByParentId(String departmentId);
}
